package smallfrench.moteur.noeuds;


import java.util.ArrayList;

import smallfrench.moteur.biblio.RFonctionScript;
import smallfrench.moteur.interp.Portee;
import smallfrench.moteur.lexer.lexemes.Lexeme;


/**
 * Définition de fonction.
 * @author antoine1023
 */
public class NBlocFonction extends Noeud {

	/**
	 * Le nom de la fonction ou <code>null</code> si elle est anonyme
	 */
	private String nom;

	/**
	 * La liste des noeuds des expressions de la fonction.
	 * Peut être vide.
	 */
	public final ArrayList<Noeud> noeuds;

	/**
	 * La liste des noeuds des paramètres de la fonction.
	 */
	public final ArrayList<String> nomsParametres;

	public NBlocFonction(Lexeme token,
			ArrayList<String> nomsParametres,
			ArrayList<Noeud> noeuds) {

		super(token);

		this.noeuds = noeuds;
		this.nomsParametres = nomsParametres;
	}

	public void ajouter(Noeud s) {
		noeuds.add(s);
	}

	/**
	 * Evalue la définition de la fonction.
	 * N'évalue pas la fonction !
	 * @return La fonction
	 */
	@Override
	public RFonctionScript evaluer(Portee portee) {
		return new RFonctionScript(this, portee);
	}

	/**
	 * Nomme la fonction. Utilisé par {@link NAssign}
	 * @param nom
	 */
	void setNom(String nom) {
		this.nom = nom;
	}

	public String getNom() {
		return nom;
	}

	@Override
	public String toString() {
		String r = "{";
		for (Noeud i : noeuds) {
			r += i.toString() + " ";
		}
		return r + "}";
	}

}
